package cn.suchan.jianzhi.q31_number;

/**
 * 知识点：整数中1出现的次数（从1到n的整数中数字1出现的次数）
 * 题目描述
 * 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数？
 * 为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。
 * ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数（从1 到 n 中1出现的次数）。
 *
 * @author suchan
 * @date 2019/05/31
 */
public class Solution {
    public int NumberOf1Between1AndN_Solution(int n) {
        if (n <= 0) {
            return 0;
        }
        int count = 0;
        for (int i = 1; i <= n; i++) {
            char[] chars = String.valueOf(i).toCharArray();
            for (int j = 0; j < chars.length; j++) {
                if (chars[j] == '1') {
                    count++;
                }
            }
        }
        return count;
    }

    /**
     * 借鉴别人的做法
     *
     * @param n
     * @return
     */
    public int NumberOf1Between1AndN_Solution1(int n) {
        int count = 0;
        for (int i = n; i > 0; i--) {
            int temp = i;
            while (temp > 0) {
                System.out.println("==========================");
                System.out.println("temp：" + temp + " & temp % 10==>" + temp % 10);
                if (temp % 10 == 1) {
                    count = count + 1;
                }
                temp = temp / 10;
                System.out.println("temp==>" + temp);
            }
        }
        return count;
    }

    public static void main(String[] args) {
        Solution solution = new Solution();
        System.out.println(solution.NumberOf1Between1AndN_Solution1(13));
    }
}
